package com.sky.valid;

import jakarta.validation.ConstraintValidator;
import jakarta.validation.ConstraintValidatorContext;
import org.springframework.util.CollectionUtils;

import java.util.HashSet;
import java.util.Set;

/**
 * 实现了ListValues注解的验证器，用于验证字段值是否在预定义的整数列表中。
 * 该验证器针对整数类型字段，检查字段值是否在初始化时指定的默认值集合中。
 * @author Administrator
 */
public class ListValuesConstraintValidator implements ConstraintValidator<ListValues,Integer> {

    /**
     * 存储默认值的集合，用于验证字段值是否在其中。
     */
    private Set<Integer> defaultValues = new HashSet<>();

    /**
     * 初始化验证器，从ListValues注解中获取值，并将其添加到默认值集合中。
     *
     * @param constraintAnnotation ListValues注解实例，其中包含需要的值数组。
     */
    @Override
    public void initialize(ListValues constraintAnnotation) {
        int[] value = constraintAnnotation.value();
        for (int i : value) {
            defaultValues.add(i);
        }
    }

    /**
     * 验证给定的字段值是否在默认值集合中。
     *
     * @param value 要验证的字段值。
     * @param context 验证上下文，用于在验证失败时提供错误信息。
     * @return 如果字段值在默认值集合中或默认值集合为空，则返回true；否则返回false。
     */
    @Override
    public boolean isValid(Integer value, ConstraintValidatorContext context) {
        if (CollectionUtils.isEmpty(defaultValues) || defaultValues.contains(value)){
            return true;
        }
        return false;
    }
}

